Фильтр по тематике

Современные 32-разрядные ARM-микроконтроллеры серии STM32: блок вычисления кода CRC

В статье приведено описание блока вычисления кода СRС 32-разрядных ARM-микроконтроллеров серии STM32 от компании STMicroelectronics. Рассмотрен состав и назначение регистров блока, а также даны примеры программ для работы с этим блоком.
01.09.2014 848 0
Современные 32-разрядные ARM-микроконтроллеры серии STM32: блок вычисления кода CRC

Введение

В большинстве протоколов передачи данных для обеспечения достоверности их передачи обычно используется контрольная сумма произвольного блока данных. Для повышения качества проверки данных вместо контрольной суммы можно применять специальный код, так называемый CRC (Cyclic Redundancy Code – циклический избыточный код). Обычно используют коды с разрядностью 8, 16 или 32 бит. Для вычисления такого кода применяются исходные полиномы определённого вида.

В отличие от простой контрольной суммы код CRC позволяет обнаружить искажение даже в одном бите большого массива данных. Если обнаружено несовпадение кода CRC, вычисленного на приёмной стороне для блока принятых данных, и принятого кода CRC – данные считаются недостоверными и отбраковываются. В этом случае приёмник данных посылает сообщение об ошибке кода CRC и осуществляется повторная передача данных. Таким образом, производится защита данных от искажения во время обмена между устройствами.

В принципе код CRC можно вычислять с помощью программы. Однако на такое вычисление требуется определённое время. И если обмен данными происходит регулярно, то процессору потребуется отводить немало времени на подсчёт кодов CRC для каждой передачи или приёма данных.

Для снижения затрат времени на эти операции 32-разрядные ARM-микроконтроллеры серии STM32 [1] были оснащены аппаратным блоком вычисления контрольной суммы данных в виде кода CRC.

Описание блока

На рисунке приведена диаграмма работы блока вычисления CRC микроконтроллера STM32.

Вычисление кода CRC в блоке производится с помощью 32-разрядного регистра ввода и вывода и вычислителя CRC с полиномом. Подсчёт кода производится за 4 тактовых цикла шины AHB с тактовой частотой HCLK.

Блок вычисления микроконтроллера STM32 использует для получения 32-битного слова кода CRC полином вида: X^32 + X^26 + X^23 + X^22 + X^16 + X^12 + X^11 + X^10 +X^8 + X^7 + X^5 + X^4 + X^2 + X + 1. Этот полином можно представить в виде шестнадцатеричного числа: 0x04C11DB7. Каждый разряд этого числа определяет наличие или отсутствие члена полинома X в соответствующей степени.

Блок вычисления использует 32-разрядный регистр данных как входной регистр для записи очередных данных для вычислителя кода CRC, а также хранит в нём результат предыдущего вычисления CRC, используемый при чтении этого регистра. Каждая операция записи в регистр данных создаёт комбинацию предыдущего значения CRC и его нового значения. Вычисление кода CRC выполняется не побайтно, а сразу над целым 32-разрядным словом.

Вычисление кода CRC обычно используется для проверки корректности передачи и приёма данных. Кроме того, в соответствии со стандартом EN/IEC 60335-1 код CRC может использоваться для проверки целостности содержимого флэш-памяти. Код CRC программы вычисляется в контроллере во время его работы, а затем сравнивается с контрольной суммой, которая была подсчитана во время её предварительной компоновки и была сохранена в определённой области памяти. При их несовпадении формируется соответствующее прерывание, и выполнение программы прекращается.

Регистры блока

Блок вычисления CRC включает в свой состав следующие регистры:

  • регистр данных CRC_DR;
  • регистр независимых данных CRC_IDR;
  • регистр управления CRC_CR.

В таблице приведена карта регист­ров блока вычисления CRC, а также и их значения после сброса.

Регистр данных CRC_DR используется как входной регистр при записи новых данных в вычислитель CRC. При чтении он содержит предыдущий результат вычисления CRC.

Регистр независимых данных CRC_IDR используется как 8-разрядный регистр общего назначения. Он может использоваться для временного хранения одного байта. Данные этого регист­ра сохраняются при сбросе CRC, вызванного битом регистра CRC_CR.

Регистр управления CRC_CR содержит всего один бит, используемый как бит сброса. Он сбрасывает блок вычисления CRC и устанавливает регистр данных в исходное значение 0xFFFF FFFF. Этот бит программно можно только устанавливать. Сбрасывается он автоматически, аппаратно.

Более подробную информацию о блоке вычисления кода CRC можно получить в оригинальном источнике [2].

Программирование

Библиотека CMSIS предоставляет целый набор функций для работы с блоком CRC. Функции этой библиотеки и подробные комментарии к ним представлены в листинге 1.

Для инициализации блока вычисления кода CRC и работы с ним необходимо выполнить следующие действия:

  • разрешить тактирование блока;
  • произвести сброс данных блока;
  • записать массив данных в блок;
  • считать вычисленное значение кода CRC из блока.

Рассмотрим конкретный пример программы, приведённый в листинге 2, которая позволяет вычислить код CRC для массива данных.

В результате работы программы переменная data_crc будет иметь значение 0x4B6B373E. Это и есть код CRC, который можно передавать вместе с массивом данных по каналу связи.

Таким образом, с помощью блока вычисления кода СRС обеспечивается надёжный обмен данными с внешним устройством без увеличения нагрузки на процессор микроконтроллера STM32.

Литература

  1. https://www.st.com.
  2. http://www.st.com/web/en/resource/technical/document/reference_manual/CD00246267.pdf.

© СТА-ПРЕСС

Если вам понравился материал, кликните значок — вы поможете нам узнать, каким статьям и новостям следует отдавать предпочтение. Если вы хотите обсудить материал —не стесняйтесь оставлять свои комментарии : возможно, они будут полезны другим нашим читателям!

01.09.2014 848 0
Комментарии
Рекомендуем
Проверяемое автономное управление: архитектура контроля решений ИИ в киберфизических и распределённых системах Электроника и автоматизация

Проверяемое автономное управление: архитектура контроля решений ИИ в киберфизических и распределённых системах

В статье рассматривается архитектура SEACS (Self-Evolving Autonomous Control System), предназначенная для построения проверяемого контура автономного управления в распределённых и киберфизических системах. В отличие от подходов, где успешный вызов модели или выполнение команды трактуется как завершение задачи, SEACS разделяет наблюдение, оценку состояния, выбор решения, исполнение и последующую проверку фактического результата. Рассматриваются механизмы управления риском и доверием, гистерезиса, задержки повторных воздействий, резервных сценариев и передачи решения человеку. Отдельное внимание уделено воспроизводимым испытаниям, требованиям к данным и метрикам, а также ограничениям исследовательского прототипа.
30.10.2026 СЭ №8/2026 286 0
К 130-летию со дня рождения великого советского физика Игоря Евгеньевича Тамма. Часть 7. Оптические уровни  и плазмон-поляритоны Тамма Электроника и автоматизация

К 130-летию со дня рождения великого советского физика Игоря Евгеньевича Тамма. Часть 7. Оптические уровни и плазмон-поляритоны Тамма

Эта статья завершает серию публикаций о научном наследии Игоря Тамма, в которой была проанализирована эволюция идей Тамма и его учеников от 1930-х годов до наших дней. Среди различных направлений, которыми в различные периоды своей жизни занимался Игорь Тамм, мы остановились на тематике, связанной с взаимодействием света с электронами на границе металла и диэлектрика. Данное направление, начавшееся с разработки теории «таммовских поверхностных состояний», логически продолжилось открытием оптических состояний Тамма (Optical Tamm States – OTS), а затем плазмон-поляритонов Тамма (Tamm Plasmon-Polaritons – TPP). Именно этим двум явлениям посвящена настоящая статья.
28.10.2026 СЭ №8/2026 336 0

Реклама
Реклама.  ООО «Остек-СМТ»  ИНН 7731481045  erid = 2SDnjchs19E
Реклама
Реклама.  ООО «Остек-СМТ»  ИНН 7731481045  erid = 2SDnjdHxidA
  Подписывайтесь на наш канал в Telegram и читайте новости раньше всех! Подписаться